MFC (Microsoft Foundation Classes) অ্যাপ্লিকেশনে Message Map এবং Message Handling হলো দুটি অত্যন্ত গুরুত্বপূর্ণ কনসেপ্ট যা ইভেন্ট ড্রিভেন প্রোগ্রামিং এ ব্যবহৃত হয়। MFC উইন্ডো সিস্টেমে যখন কোনো ইউজার ইন্টারঅ্যাকশন বা উইন্ডো ইভেন্ট ঘটে, তখন সেগুলো সংশ্লিষ্ট Message Map এর মাধ্যমে প্রোসেস করা হয় এবং সঠিক Message Handler কল করা হয়।
Message Map এবং Message Handling এর মাধ্যমে, আপনি বিভিন্ন ধরনের মেসেজ যেমন কীবোর্ড, মাউস ক্লিক, পেইন্টিং, উইন্ডো রিফ্রেশ ইত্যাদি ইভেন্টের জন্য কোড লিখতে পারেন।
Message Map কী?
Message Map হল একটি ম্যাপ যা উইন্ডো বা কন্ট্রোলের বিভিন্ন ইভেন্টের সাথে সঠিক ফাংশন (হ্যান্ডলার) সংযুক্ত করে। এটি MFC-তে উইন্ডো মেসেজের (যেমন, বাটন ক্লিক, কীবোর্ড ইনপুট, উইন্ডো রিফ্রেশ ইত্যাদি) হ্যান্ডলিং এর জন্য ব্যবহৃত হয়। MFC Message Map ম্যাক্রো ব্যবহারের মাধ্যমে একটি সিস্টেম তৈরি করে যা বিভিন্ন মেসেজকে সংশ্লিষ্ট ফাংশনের সাথে ম্যাপ করে দেয়।
MFC উইন্ডো মেসেজ হ্যান্ডল করার জন্য ON_ প্রিফিক্স দিয়ে ম্যাক্রো ব্যবহার করা হয়, যেমন ON_BN_CLICKED, ON_WM_PAINT ইত্যাদি।
Message Map এর গঠন
MFC তে একটি Message Map সাধারণত দুটি অংশে ভাগ করা হয়:
- Message Declaration: এটি ক্লাসের হেডার ফাইলে হয়, যেখানে ম্যাক্রো দ্বারা বিভিন্ন মেসেজ ডিক্লেয়ার করা হয়।
- Message Map Implementation: এটি ক্লাসের সোস ফাইলে হয়, যেখানে প্রতিটি ম্যাক্রোকে সংশ্লিষ্ট ফাংশনের সাথে ম্যাপ করা হয়।
Message Map এর উদাহরণ
ধরা যাক, একটি বাটন ক্লিক হলে একটি মেসেজ বক্স দেখানো হবে। এর জন্য প্রথমে আপনাকে Message Map ডিক্লেয়ার করতে হবে।
1. Message Map Declaration
Header File (.h):
class CMyDialog : public CDialogEx
{
public:
CMyDialog(CWnd* pParent = nullptr); // Standard constructor
enum { IDD = IDD_MYDIALOG }; // Dialog ID
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnButtonClicked(); // Button click handler
};
2. Message Map Implementation
Source File (.cpp):
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON_OK, &CMyDialog::OnButtonClicked) // Button click event
END_MESSAGE_MAP()
void CMyDialog::OnButtonClicked()
{
AfxMessageBox(_T("Button Clicked!"));
}
এখানে, ON_BN_CLICKED(IDC_BUTTON_OK, &CMyDialog::OnButtonClicked) ম্যাক্রোটি IDC_BUTTON_OK বাটন ক্লিক হলে OnButtonClicked() ফাংশনকে কল করে।
Message Handling কী?
Message Handling হল একটি প্রক্রিয়া, যেখানে বিভিন্ন উইন্ডো মেসেজ বা ইভেন্টগুলোর জন্য হ্যান্ডলার ফাংশনগুলি কল করা হয়। MFC তে Message Handler ফাংশনগুলো একটি নির্দিষ্ট মেসেজ ট্রিগার হলে কল হয় এবং তাদের মধ্যে যথাযথ অ্যাকশন সম্পাদিত হয়।
উদাহরণস্বরূপ, উইন্ডো রিফ্রেশ (পেইন্টিং) বা কীবোর্ড ইনপুটের জন্য আলাদা আলাদা Message Handler ফাংশন থাকতে পারে।
Message Handling এর উদাহরণ
1. WM_PAINT (Window Painting) Message Handling
WM_PAINT মেসেজ যখন অ্যাপ্লিকেশন উইন্ডো রিফ্রেশ করতে চায় (অর্থাৎ, উইন্ডো পুনরায় আঁকতে চায়) তখন এটি ট্রিগার হয়। এই মেসেজটি হ্যান্ডল করার জন্য OnPaint() ফাংশন ব্যবহার করা হয়।
Code Example:
void CMyDialog::OnPaint()
{
CPaintDC dc(this); // Device context for painting
// Drawing a simple line
dc.MoveTo(10, 10); // Starting point
dc.LineTo(200, 200); // Ending point
// Drawing a rectangle
dc.Rectangle(50, 50, 150, 150);
}
এখানে, OnPaint() ফাংশনটি WM_PAINT মেসেজ দ্বারা কল হয় এবং উইন্ডোতে ড্রইং কার্যক্রম সম্পাদন করে।
2. WM_KEYDOWN (Key Down) Message Handling
কীবোর্ড থেকে ইনপুট নেয়ার জন্য WM_KEYDOWN মেসেজ ব্যবহার করা হয়। আপনি যখন কীবোর্ডের একটি কী প্রেস করবেন, তখন এই মেসেজ ট্রিগার হবে এবং এর সাথে সংশ্লিষ্ট হ্যান্ডলার ফাংশনকে কল করবে।
Code Example:
afx_msg void CMyDialog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// Check if the pressed key is the 'Enter' key
if (nChar == VK_RETURN)
{
AfxMessageBox(_T("Enter key pressed"));
}
}
এখানে, OnKeyDown() ফাংশনটি WM_KEYDOWN মেসেজ দ্বারা কল হয় এবং কীবোর্ড থেকে কোনো কী প্রেস হলে সেই কী এর উপর নির্ভর করে একটি অ্যাকশন নেয়।
MFC তে Message Map ব্যবহারের উপকারিতা
- Code Clarity: Message Map এর মাধ্যমে, কোড পরিষ্কার এবং সুসংগঠিত হয়। প্রতিটি মেসেজের জন্য একটি নির্দিষ্ট হ্যান্ডলার ফাংশন থাকতে পারে।
- Event-Driven Programming: MFC এর Message Map প্রোগ্রামকে ইভেন্ট-ড্রিভেন (Event-Driven) করার জন্য সহায়তা করে, যেখানে প্রতিটি ইভেন্ট বা মেসেজের জন্য একটি নির্দিষ্ট অ্যাকশন বা হ্যান্ডলার কল হয়।
- Ease of Maintenance: Message Map ব্যবহার করলে কোডের রক্ষণাবেক্ষণ সহজ হয়, কারণ প্রতিটি মেসেজের জন্য একটি আলাদা হ্যান্ডলার ফাংশন থাকা সহজেই ট্র্যাক করা যায়।
Message Map এর অন্যান্য উদাহরণ
- Mouse Click Handling:
ON_WM_LBUTTONDOWN()
- Window Resizing:
ON_WM_SIZE()
- Key Press:
ON_WM_KEYDOWN()
সারাংশ: MFC এর Message Map এবং Message Handling হলো অত্যন্ত গুরুত্বপূর্ণ কনসেপ্ট, যা ইভেন্ট ড্রিভেন প্রোগ্রামিং সক্ষম করে এবং উইন্ডো বা কন্ট্রোলের ইন্টারঅ্যাকশনের জন্য সঠিক ফাংশনগুলো কল করতে সহায়তা করে। Message Map এর মাধ্যমে আপনি বিভিন্ন উইন্ডো মেসেজ এবং কন্ট্রোল ইভেন্টগুলোর জন্য হ্যান্ডলার ফাংশন সংজ্ঞায়িত করতে পারেন, যার ফলে আপনার অ্যাপ্লিকেশন আরও ইন্টারঅ্যাকটিভ এবং কার্যকরী হয়।
Read more